package com.dhecp.project.system.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.dhecp.core.genericDao.GenericDao;
import com.dhecp.project.system.domain.SysDictionaryForExport;
import com.dhecp.project.system.domain.SysDictionaryForField;
import com.dhecp.project.system.domain.SysDictionaryForPageField;
import com.dhecp.project.system.domain.SysFieldForConditions;
import com.dhecp.project.system.domain.SysUserProcessInstanceTask;

/**
 * 功能字段dao层
 * @author DH-Xxj
 * @version 2019年8月28日
 */
public interface SysDictionaryForFieldMapper extends GenericDao<SysDictionaryForField, String> {
	
	/**
	 * 查询所有记录
	 * @param parems
	 * @return 实体DictionaryForField
	 */
	List<SysDictionaryForField> findDictionaryForField(Map<String, Object> params);
	
	/**
     * 按功能表名查询字段
     * @param parems
     * @return List-DictionaryForModule
     */
	List<SysDictionaryForField> findDictionaryForFieldByTableName(Map<String, Object> params);
	
	/**
	 * 通过guid查询单条记录
	 * @param guid
	 * @return 实体DictionaryForField
	 */
	SysDictionaryForField findDictionaryForFieldByGuid(@Param("guid") String guid);

	/**
	 * 获取导入模板、导出数据 字段列表
	 * @param params
	 * @return List-SysDictionaryForExport
	 * @author DH-Xxj
	 */
	List<SysDictionaryForExport> findExportField(Map<String, Object> params);
	
	/**
	 * 获取功能页面中字段及各属性
	 * @param params
	 * @return List-DictionaryForField
	 * @author DH-Xxj
	 */
	List<SysDictionaryForPageField> findFieldAttributes(Map<String, Object> params);
	
	/**
	 * 获取导入模板列
	 * @param params
	 * @return List-SysFieldForConditions
	 * @author DH-Xxj
	 */
	List<SysFieldForConditions> findFieldFrontImport(Map<String, Object> params);
	
	/**
	 * 获取必填字段
	 * @param params
	 * @return List-DictionaryForField
	 * @author DH-Xxj
	 */
	List<SysDictionaryForField> findFieldFrontRequired(Map<String, Object> params);

	/**
	 * 获取作为查询条件的字段
	 * @param moduleTable 必要参数：功能唯一标识
	 * @param loginUser 可选参数：当前登录用户编号
	 * @param getFieldAttributesType 可选参数：类型【page：查询页面中显示的查询条件（对于当前用户未被隐藏的查询条件字段）；pagecallin：调入页面中显示的查询条件（对于当前用户未被隐藏的查询条件字段）；wherestr：后端组装查询语句的条件（所有查询条件字段）】
	 * @param getFieldAttributesSystemType 可选参数：类型【web：网页端；mobile：手机端】
	 * @return List-SysFieldForConditions
	 * @author DH-Xxj
	 */
	List<SysFieldForConditions> findFieldFrontConditions(Map<String, Object> params);
	
	/**
	 * 获取用户指定功能数据权限字符串
	 * @param params
	 * @return String
	 * @author DH-Xxj
	 */
	String findJurisdictionForData(Map<String, Object> params);

	/**
	 * 查询用户流程任务（指定nid前一单、本单、后一单）
	 * @param privateAUser 必要参数：查询用户编号
	 * @param moduleTable 必要参数：查询单据唯一标识
	 * @param privateNid 必要参数：查询单据nid号
	 * @param flowtype 必要参数：查询类型【前单（last）、本单（this）、后单（next）】
	 * @return SysUserProcessInstanceTask 实体
	 * @author DH-Xxj
	 */
	SysUserProcessInstanceTask findUserProcessInstanceTask(Map<String, Object> params);

	/**
	 * 查询用户流程任务（指定nid前一单）
	 * @param params
	 * @return SysUserProcessInstanceTask
	 * @author DH-Xxj
	 */
	SysUserProcessInstanceTask findUserProcessInstanceTaskLastNid(Map<String, Object> params);

	/**
	 * 查询用户流程任务（指定nid后一单）
	 * @param params
	 * @return SysUserProcessInstanceTask
	 * @author DH-Xxj
	 */
	SysUserProcessInstanceTask findUserProcessInstanceTaskNextNid(Map<String, Object> params);

	/**
	 * 查询用户流程任务（指定nid）
	 * @param params
	 * @return SysUserProcessInstanceTask
	 * @author DH-Xxj
	 */
	SysUserProcessInstanceTask findUserProcessInstanceTaskByNid(Map<String, Object> params);
	
	/**
	 * 查询用户指定PGuid功能任务数（指定nid或guid）
	 * @param params
	 * @return SysUserProcessInstanceTask
	 * @author DH-Xxj
	 */
	SysUserProcessInstanceTask findUserModuleTaskByPGuid(Map<String, Object> params);
	
	/**
	 * 查询用户指定PGuid通知数（指定nid或guid）
	 * @param params
	 * @return SysUserProcessInstanceTask
	 * @author DH-Xxj
	 */
	SysUserProcessInstanceTask findUserModuleNoticeByPGuid(Map<String, Object> params);

	/**
	 * 新增功能字段数据字典
	 * @param dictionaryForField
	 * @return
	 */
	int insertDictionaryForField(SysDictionaryForField dictionaryForField);

	/**
	 * 修改功能字段数据字典
	 * @param dictionaryForField
	 * @return
	 */
	int updateDictionaryForField(SysDictionaryForField dictionaryForField);

	/**
	 * 删除功能字段数据字典
	 * @param dictionaryForField
	 * @return
	 */
	int deleteDictionaryForFieldByGuid(SysDictionaryForField dictionaryForField);

	/**
	 * 根据moduleTable 获取数据
	 * @param params
	 * @return List-dictionaryForMobileField
	 * @author
	 */
	List<SysDictionaryForField> getDictionaryForFieldModuleTableData(@Param("moduleTable") String moduleTable);

	/**
	 *一键新增pc字段
	 */
	List<Map<String, Object>> searchPC(@Param("name") String name);
}
